#ifndef ICE_CREAM_PROCESS_H
#define ICE_CREAM_PROCESS_H

#include "ice_cream_types.h"
#include "state_machine.h"
// 最大可选择配料数量（可根据实际需求调整）
#define MAX_SELECTED_JAMS     3
#define MAX_SELECTED_TOPPINGS 3

// 时间相关定义
#define BEIJING_TIMEZONE_OFFSET 8  // 北京时间为UTC+8

typedef struct {
    uint32_t start_time;  // 统计起始时间
    uint32_t count;       // 统计次数（出杯/出料次数）
} StatItem;

// 总统计数据结构体
typedef struct {
    StatItem total_cups;       // 总售卖杯数统计
    // 果酱统计
    StatItem jam[3];             // 果酱123出料统计
    // 顶料统计
    StatItem topping[3];         // 顶料123出料统计
} Statistics;

// 流程数据结构体
typedef struct {
    ProductionConfig config;      // 制作配置参数
    StateMachine fsm;             // 状态机实例
    uint32_t timer;               // 状态计时器(ms)
    uint8_t current_jam_idx;      // 当前处理的果酱索引（在selected_jams中）
    uint8_t current_topping_idx;  // 当前处理的顶料索引（在selected_toppings中）
    ErrorCode error_code;         // 错误代码
    uint32_t start_time;          // 操作开始时间
    // 动态配料列表（支持重复选择）
    uint8_t selected_jams[MAX_SELECTED_JAMS];    // 选中的果酱列表（可重复）
    uint8_t selected_toppings[MAX_SELECTED_TOPPINGS]; // 选中的顶料列表（可重复）
    uint8_t selected_jam_count;   // 选中果酱总数
    uint8_t selected_topping_count; // 选中顶料总数
    Statistics stats;             // 统计数据
    uint32_t last_cup_timestamp; // 最后一次出杯的北京时间戳
    bool statistics_updated;
} ice_cream_process_data_t;

// 公共接口声明
void ice_cream_process_init(void);
void ice_cream_set_config(const ProductionConfig* config);
bool ice_cream_set_selected_jams(uint8_t jam[], uint8_t count);
bool ice_cream_set_selected_topping(uint8_t topping[], uint8_t count);

void ice_cream_clear_selected_ingredients(void);
bool ice_cream_start_process(void);
void ice_cream_stop_process(void);
void ice_cream_process_handler(void);
ProcessState ice_cream_get_current_state(void);
ErrorCode ice_cream_get_error_code(void);
void ice_cream_clear_error(void);
int ice_cream_config_init(void);

 ice_cream_process_data_t *ice_icream_process_data_get(void);
#endif // ICE_CREAM_PROCESS_H
    